package threadPool;

import java.util.concurrent.CompletableFuture;
import java.util.function.Supplier;

/**
 * @author: 李德才
 * @description:
 * @create: 2020-12-19 20:25
 **/
public class T07_CompletableFuture {


    /**
     * Runnable就是没有返回结果的行为。
     * Callable是有返回结果的行为。
     * Future 异步封装 Callable和 Runnable，委托给线程池执行后，需要取回执行的结果
     * CompletableFuture 封装了Future，使其拥有了回调的功能，在某个行为完成之后，可以继续进行下一个动作。
     *
     * @param args
     */

    public static void main(String[] args) {

        Supplier<Integer> supplier = () -> {
            System.err.println("1");
            return 1;
        };

        CompletableFuture<Integer> completableFuture1 = CompletableFuture.supplyAsync(supplier);
        CompletableFuture<Integer> completableFuture2 = CompletableFuture.supplyAsync(supplier);
        CompletableFuture<Integer> completableFuture3 = CompletableFuture.supplyAsync(supplier);

//        统一管理
        CompletableFuture.allOf(completableFuture1, completableFuture2, completableFuture3).join();


//        支持链式调用处理
        CompletableFuture.supplyAsync(() -> 1)
                .thenApply(String::valueOf)
                .thenApply(str -> str)
                .thenAccept(System.err::println);

    }
}
